跳到主要内容

Visual Studio 学习

Visual Studio 的项目结构

参考资料 初探vs项目文件结构

在学习之前先来看下 Visual Studio 的项目结构,每次都被那个项目的概念弄的有点劝退,这里先来学习一下它的工程

首先创建一个 helloworld 项目,下面可以知道第一个项目是需要依赖 .sln.vcxproj 文件的(根据第二个项目的提示)

创建的项目目录如下

helloWorld.vcxproj

这是使用应用程序向导生成的 VC++ 项目的主项目文件,其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。

helloWorld.vcxproj.filters

这是使用 “应用程序向导” 生成的 VC++ 项目筛选器文件。它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp” 文件与“源文件”筛选器关联。

helloWorld.cpp

这是主应用程序源文件。

.vcxproj 文件是什么

vcxproj文件:工程文件,其中描述了工程的各项属性,修改该文件后再重新 build 时 vs 会重新 build 工程

vcxproj.filter文件:可理解为视图文件,定义了工程在 VS 中打开后的目录结构,修改该文件后重新 build 时 vs 不会重新 build 工程

解决方案 .sln 文件

参考资料 理解 Visual Studio 解决方案文件格式(.sln)

所以这个 .sln 文件是什么?

它就是 Visual Studio 解决方案(.sln)文件

使用文本编辑器打开这个 .sln 文件,可以看到它内部就是记录了一些信息

Visual Studio 的解决方案文件由这三个部分组成:

版本信息

  • Microsoft Visual Studio Solution File, Format Version 12.00
  • # Visual Studio Version 16
  • VisualStudioVersion = 16.0.31005.135
  • MinimumVisualStudioVersion = 10.0.40219.1

项目信息

  • Project
  • EndProject

全局信息

  • Global
  • EndGlobal

虽然看起来是三个独立的部分,但其实除了版本号之外,项目信息和全局信息还是有挺多耦合部分的。

版本信息

记录文件的格式版本是 12.0。使用 Visual Studio 2019 编辑/创建。

这里有一个小技巧,这里的 VisualStudioVersion 版本号设置为 15.0 会使得打开 sln 文件的时候默认使用 Visual Studio 2017,而设置为 16.0 会使得打开 sln 文件的时候默认使用 Visual Studio 2019。

项目信息

Project

Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "helloworld", "helloworld.vcxproj", "{E4514E27-B29D-4BF3-85D0-112C8833D185}"

项目信息至少由两行组成,第一行标记项目信息开始,而最后一行表示信息结束。

其格式为:

Project("{项目类型}") = "项目名称", "项目路径", "项目 Id"
EndProject

ProjectSection

Project 和 EndProject 的内部还可以放 ProjectSection

比如对于解决方案文件夹,可以包含解决方案文件

全局信息

Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Debug|x64.ActiveCfg = Debug|x64
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Debug|x64.Build.0 = Debug|x64
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Debug|x86.ActiveCfg = Debug|Win32
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Debug|x86.Build.0 = Debug|Win32
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Release|x64.ActiveCfg = Release|x64
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Release|x64.Build.0 = Release|x64
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Release|x86.ActiveCfg = Release|Win32
{E4514E27-B29D-4BF3-85D0-112C8833D185}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CB53406C-150C-4211-B4B7-81388B3E7CC6}
EndGlobalSection
EndGlobal

在这个全局信息的例子中,为解决方案指定了两个配置(Configuration),Debug 和 Release,平台都是 x86 CPU 和 x64 CPU。同时也为每个项目指定了单独的配置种类,可供选择,每一行都是 项目的配置 = 解决方案的配置 表示此项目的此种配置在解决方案的某个全局配置之下。